package style.Leetcode.初级算法.str.str_20220804_2_有效的字母异位词;

import java.util.Arrays;

/**
 * 有效的字母异位词
 *
 * 给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的字母异位词。
 * 注意：若s 和 t中每个字符出现的次数都相同，则称s 和 t互为字母异位词。
 *
 * 示例 1:
 * 输入: s = "anagram", t = "nagaram"
 * 输出: true
 *
 * 示例 2:
 * 输入: s = "rat", t = "car"
 * 输出: false
 *
 *
 * */
public class Solution {
    /**
     * 思路1：
     *      1、使用数组，先统计字符串1的次数，再减去字符串2的次数
     */
    public boolean isAnagram1(String s, String t) {
        if (s.length() != t.length()) return false;
        int[] nums = new int[26];

        char[] chars = s.toCharArray();
        for (int index = 0; index < chars.length; index++) {
            nums[s.charAt(index)-'a']++;
        }

        char[] charsT = t.toCharArray();
        for (int index = 0; index < charsT.length; index++) {
            nums[t.charAt(index)-'a']--;
        }

        for (int num : nums) {
            if (num != 0) {
                return false;
            }
        }
        return true;

    }

    /**
     * 先排序后比较
     */
    public boolean isAnagram2(String s, String t){
        char[] charS = s.toCharArray();
        char[] charT = t.toCharArray();
        Arrays.sort(charS);
        Arrays.sort(charT);
        return Arrays.equals(charS, charT);
    }



    public static void main(String[] args) {
        Solution solution = new Solution();
        boolean flag1 = solution.isAnagram1("rat", "cat");
        System.out.println(flag1);
        System.out.println(solution.isAnagram2("rat", "cat"));
    }
}
